iT邦幫忙

2022 iThome 鐵人賽

DAY 23
1
Software Development

QA 三十天養成日記系列 第 23

[Day23][負載測試] K6 基本介紹、安裝及實作,輕鬆上手!

  • 分享至 

  • xImage
  •  

簡單介紹

k6 是用 Go 語言編寫的一種高效能的負載測試工具。具有下面幾個特點。

  • K6 嵌入了 JavaScript 執行時,可以使用 JavaScript ES2015/ES6 來編寫指令碼。
  • 強大的 CLI 工具。
  • 使用 Checks 和 Thresholds 可以更加輕鬆的做面向目標的自動化的負載測試。
(詳細內容之後會介紹)
備註:
Checks: 類似斷言功能,但不會真的中斷執行,只是會返回 check 的數據百分比
Thresholds: 極限值、門檻、閾值(google翻譯XD),指測試系統性能所預期的通過 or 失敗的標準

為什麼要用 K6?

看完介紹,就知道了他是用 JavaScript 直接進行負載測試(JavaScript 腳本 -> Go 底層運作)
相信這對專注於寫 JavaScript 的人是一大福音

有得時候光是要學好一個語言就很累了,更何況如果你還要使用應對不同框架、工具而且去學習新的語言,我相信學到好的時間成本會很高

以自身公司而言,大多都是 JavaScript 為基底的測試

所以如果團隊中能夠統一一種語言,不管是在測試、開發上,能降地學習成本 及 提高協做效率

以個人學習曲線來說,新知識、新技術、新語言是很重要,但當我們處於工作中時,若評估花費時間成本很高,那不如統一語言去開發會更好,可以降低成本)


如何安裝

MacOS:

記得先安裝 Homebrew

$ brew install k6

Windows:

有兩種安裝方式,如下:

  1. 記得先安裝 Chocolatey package manager
    choco install k6

  2. 直接下載官方提供的安裝檔 latest official .msi package

小弟只有試過以上這兩個作業系統
其餘作業系統安裝方式再請直接參考官方文件: Installation,操作很簡單

了解 K6 能做到哪些負載測試

  • 冒煙測試 Smoke Testing: 用最低系統配置(硬體、網路等等…)進行測試,確認系統與程式基本功能正常,目的為看是否有 Error
  • 負載測試 Load Testing / 效能測試 Performance testing: 用當前系統配置,目的為預想用戶數量與吞吐量(RPS)狀況下服務效能狀況
  • 壓力測試 Stress Testing: 用當前系統配置,目的測試系統的極限在哪, 流量慢慢的湧入 (請勿在production測試)
  • 峰值測試 Spike Testing: 用當前系統配置,目的測試系統抵擋高併發極限, 流量一「瞬間」湧入 (請勿在production測試)
  • 浸泡測試 Soak Testing: 主要測試負載量在「長時間」的情況下,確認系統的可靠性和效能

大致上的分類為(低中高流量每間公司定義都不一樣哦)

低流量 中等流量 高流量
Smoke Test Load Test Stress Test
Soak Test Spike Test

小試身手

直接參考官方文檔

請建立一個 k6 的專案,並新增一個 script.js 檔案
並將以下 code直接複製貼上

import http from 'k6/http';
import { sleep } from 'k6';

export const options = {
  vus: 1, //代表模擬用戶數量
  duration: '1s', //代表執行時間
};

export default function () {
  http.get('https://test.k6.io'); //測試目標網址
}

開啟的你的 CLI(命令列介面),直接輸入 k6 run script.js

以下為測試的結果:

其中左側各個指標 (metric) 之後會再詳細解說

恭喜你已經完成了一個負載測試腳本了


總結

k6 官方提供的文檔其實都非常好懂,甚至都會附上很多程式碼範本讓你直接使用。
基本使只要會 JS,你就可能無痛起手了。

另外 k6 這框架大多使用的情境是以下

適用人員 描述
開發人員與SDET 方便我們透過K6提供的api以及CLI工具來使用開發且開發人員同常對 Javascript 也不太陌生, 他們也能快速使用 Javascript 來開發模擬真實場景的負載測試
DevOps和SRE 這兩個職位都是偏運維方面的. 我們能把上面SDET開發的script拿來進行自動化地壓力測試, 確保我們的基礎建設與應用服務都還是保持著高性能的表現. 在K6開發的script內, 設定SLO, 來測試服務的運行狀況是否達標
QA 更方便的寫測試案例與腳本, 跑起來也很快,還能跟Postman, Swagger等整合, 對QA來說是很方便的

參考


上一篇
[Day22] 軟體世界裡的 TDD/BDD/ATDD!懶人包幫你一次釐清(二)
下一篇
[Day24][負載測試] K6 使用上常見的參數設定(options)有哪些?
系列文
QA 三十天養成日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言